home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / dcg301up / quester.scr < prev    next >
Text File  |  1993-05-25  |  5KB  |  178 lines

  1. !
  2. ! Default quester script..
  3. !
  4. ! (c) DC Software, 1992
  5. !
  6.  
  7. !------------------------------------------------------------------------!
  8. :@TALK ! Talk to the character !
  9. !------------------------------------------------------------------------!
  10.  
  11. ! No more quests?
  12.   if npc.v1 = 16 GOTO NOMORE;
  13.  
  14. ! Always talk to the leader of the pack..
  15.   group.current = 0;
  16.  
  17. ! Initialize the first time through..
  18.   if npc.v0 = 0 then
  19.     npc.v0 = 1;  ! We've talked, but no quest is pending..
  20.     npc.v1 = 0;  ! Do quest 0 first.
  21.   else
  22.     if npc.v0 = 2 goto QUEST; ! We already have a quest..
  23.   endif;
  24.  
  25. ! Select the item to be quested..
  26. :LOOP
  27.   setbp( npc, npc.v1 );
  28.   if npc.bp.count = 0 then
  29.     inc( npc.v1 );       ! The slot is empty, check the next one !
  30.     if npc.v1 = 16 
  31.        goto NOMORE;      ! We've got no more quests !
  32.     goto LOOP;
  33.   endif;
  34.  
  35. :START
  36.   writeln( "Are you in need of a quest?" );
  37.  
  38.   L1 = select( "Yes", "No", "Talk", "Bye" );
  39.   ON L1 GOTO QYES, QNO, CHAT, CSTOP;
  40.  
  41. :QYES
  42.   writeln( "I'll pay you ", $npc.bp.value, " if you bring me the ", npc.bp.name );
  43.   writeln( "Good luck.." );
  44.   npc.v0 = 2; ! Quest Given
  45.   STOP;
  46.  
  47. :QNO
  48.   writeln( "Then be on your way please.." );
  49.   STOP;
  50.  
  51. !
  52. ! We HAVE a quest
  53. !
  54. :QUEST
  55.   setbp( npc, npc.v1 ); ! Select the quest that was given.. !
  56.   writeln( player.name, "! Have you brought me the ", npc.bp.name, "?" );
  57.   voice( "Quest" );
  58.  
  59.   L1 = select( "Yes", "No", "Talk", "Bye" );
  60.   on L1 goto CYES, CNO, CHAT;
  61.   goto CSTOP;
  62.  
  63. :CYES
  64.  
  65. ! Find out WHO has the item
  66.   L2 = find( player, npc.bp.name );
  67.   if L2 < 0 then 
  68.     ! No one, so find out if the object is a person..
  69.     L2 = find( group, npc.bp.name );
  70.     if L2 < 0 goto NOTHERE;
  71.   endif;
  72.  
  73.   group.current = L2;
  74. ! If the player's name matches the backpack name, its a RESCUE !
  75.   if player.name = npc.bp.name then
  76.     writeln( player.name, "! I almost didn't recognize you.." );
  77.     ! 
  78.     ! When the rescued person leaves the party, take the following actions
  79.     !
  80.     player.v1 = 2;              ! 1 when I join the party.  2 on delivery! 
  81.     if( player.text >= 0 ) then
  82.       inc( player.text );       ! Change text block (if any)
  83.     endif;
  84.     if( player.voice >= 0 ) then
  85.       inc( player.voice );      ! Change voice file (if any)
  86.     endif;
  87.     if( player.picture >= 0 ) then
  88.       inc( player.picture );    ! Change picture file (if any)
  89.     endif;
  90.     player.type = CIVILIAN;     ! No longer a prisoner !
  91.     ! Place the player at next to the NPC (quester)
  92.     leave( player.index, npc.x+1, npc.y ); ! Remove from the party
  93.     group.current = 0;
  94.   else
  95.     ! Otherwise, the quested item is in the player's backpack.
  96.     L2 = find( player.bp, npc.bp.name, npc.bp.type );
  97.     if L2 < 0 GOTO NOTHERE;
  98.     vanish( player.bp );
  99.   endif;
  100.  
  101.   npc.v0 = 1;     ! No quest pending, but we already met
  102.   inc(npc.v1);    ! Increment backpack index for next quest (if any)
  103.  
  104.   ! Now give a reward..
  105.   inc( group.gold, npc.bp.value );               ! Pay for it !
  106.   writeln( $npc.bp.value, " is the reward.  Here it is." );
  107.  
  108.   if npc.bp.weight > 0 then
  109.     L4 = npc.bp.weight;                          ! Experience is given here !
  110.   else
  111.     L4 = npc.bp.value / 10 * (random(3)+1) + 1;  ! Give random experience !
  112.   endif;
  113.  
  114. ! Do the whole party..
  115.   foreach player do
  116.     inc( player.exp, L4 );    ! Level promotions are automatic !
  117.   endfor;
  118.  
  119.   if npc.bp.endgame = END_ON_GIVE then
  120.     if npc.bp.endtext > 0 then
  121.       readtext( npc.bp.endtext );
  122.     endif;
  123.     ENDGAME;
  124.   endif;
  125.  
  126. :CSTOP
  127.   writeln( "May the force be with you." );
  128.   STOP;
  129.  
  130. :CNO
  131.   writeln( "Why are you back then?" );
  132.   GOTO CHAT1;
  133.  
  134. !
  135. ! Conversation is optional for a quester, but this one likes to chat..
  136. !
  137. :CHAT
  138.   writeln( "What would you like to talk about?" );
  139.  
  140. :CHAT1
  141.   L3 = getstr("Name","Where","Quest","Bye");
  142.  
  143. ! First, see if the keyword typed is in the character's text block !
  144.   if dotext( S0 ) then
  145.     if L3 = 3 then
  146.       STOP;
  147.     endif;
  148.     goto CHAT1;
  149.   endif;
  150.  
  151. ! It didn't, so try the predefined ones..
  152.   on L3 goto CName, WHERE, START, CSTOP;
  153.  
  154. ! Nope, try a 'DEFAULT' line
  155.   if not dotext( "DEFAULT" ) then
  156.     writeln( "I don't know anything about that!" );
  157.   endif;
  158.   goto CHAT1;
  159.  
  160. :CName
  161.   writeln( "My name is ", npc.name, "."        );
  162.   GOTO CHAT1;
  163.  
  164. :WHERE
  165.   writeln( "If I knew where, I wouldn't need your services!" );
  166.   GOTO CHAT1;
  167.  
  168. :NOMORE
  169.   writeln( "Sorry, I have no more quests." );
  170.   STOP;
  171.  
  172. :NOTHERE
  173.   writeln( "You don't have the ", npc.bp.name, " with you." );
  174.   writeln( "Are you sure you found it?" );
  175.   L3 = select( "Yes", "No", "Maybe", "What", "Who", "Ugh..", "Bye" );
  176.   writeln( "Hmm..  Come back when you find it.." );
  177.   STOP;
  178.